Виджеты. Декомпозиция. Иконка приложения
➡️ Ссылка на репозиторий с кодом этого урока
Декомпозиция виджета
Когда внутри одного виджета много кода, его становится сложно читать и понимать и это плохо для производительности приложенеия.
В таких случаях становится необходимым рефакторинг кода.
Нужно разделить большой виджет на несколько мелких виджетов.
Какие преимущества это дает?
- Код становится более
читабельнымистетически привлекательным - Улучшается
производительностьприложения
В документации Flutter также рекомендуется разбивать виджеты на максимально простые компоненты для оптимизации и удобства работы.
Не забываем пользоваться
сниппетамидля быстрого написания кода. Например, чтобы быстро создать шаблонный код дляStatelessWidgetнужно написать сниппетstatelessWнажатьtabилиenter

- Добавим ещё один виджет и назовём его
HomeWidget. Перенесём в него все виджеты начиная соCenter
- Внутрь
MaterialApp()нужно теперь передатьHomeWidget
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "Hello Flutter App",
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue),
),
home: Scaffold(
appBar: AppBar(
title: const Text("Hello Flutter App"),
),
body: HomeWidget(), // 👈 Добавляем наш виджет для главного экрана
),
);
}
}
// 👉 Отдельный виджет для главного/домашнего экрана
class HomeWidget extends StatelessWidget {
const HomeWidget({super.key});
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset("assets/images/roll.png", width: 250),
Text("Вкусные Роллы", style: TextStyle(fontSize: 20)),
SizedBox(height: 20),
ElevatedButton(onPressed: () {}, child: const Text("Купить")),
],
),
);
}
}
Нажимаем на кнопку Restart и проверяем, что всё по прежнему работает

Как в VS Code включить линии для выделения блоков дерева виджетов?
.png)
В настройках settings (ctrl + ,) найдите эти строки и поставьте значения true
"dart.previewFlutterUiGuides": true
"dart.previewFlutterUiGuidesCustomTracking": true
.png)
.png)